package com.xing.binbackend.pattern.template32;

public abstract class TransactionTemplate {
    // 模板方法（final防止篡改）
    public final void execute() {
        try {
            beginTransaction();
            doBusiness();      // 抽象方法（子类实现业务）
            commit();
        } catch (Exception e) {
            rollback();         // 钩子方法（可选重写）
            compensate();       // 抽象方法（必须实现补偿）
        } finally {
            releaseResources();
        }
    }

    protected abstract void doBusiness();
    protected abstract void compensate();
    protected void rollback() {} // 默认空实现（钩子方法）

    private void beginTransaction() { /* 公共事务开启逻辑 */ }
    private void commit() { /* 公共提交逻辑 */ }
    private void releaseResources() { /* 资源释放 */ }
}
